/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.faimg.pomar.modelo.dao;

import br.faimg.pomar.modelo.interfaces.CRUDInterface;
import br.faimg.pomar.modelo.pojo.OrdemProducao;
import br.faimg.pomar.modelo.pojo.Produto;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author juliana
 */
public class OrdemProducaoDAO implements CRUDInterface<OrdemProducao>{

    public void create(OrdemProducao pojo) {
  System.out.println(pojo.getNumOrp());
  System.out.println(pojo.getProduto().getCodigo());
  System.out.println(pojo.getQtdProd());
     Connection con = null;
         PreparedStatement stm = null;
         String sql = "insert into ORDEM_PRODUCAO values(?,?,?);";
        try {
             con = ConnectionManager.getInstance().getConnection();
             stm = con.prepareStatement(sql);
             stm.setInt(1, pojo.getNumOrp());
             stm.setString(2, pojo.getProduto().getCodigo());
             stm.setInt(3, pojo.getQtdProd());
             stm.execute();
        } catch (SQLException ex) {
            Logger.getLogger(ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
          }finally {
            if (stm != null){
              try {
                stm.close();
                } catch (SQLException ex) {
                    Logger.getLogger(ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if (con != null){
              try {
                con.close();
              } catch (SQLException ex) {
                   Logger.getLogger(ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
              }
            }
          }
    }
  
    public void update(OrdemProducao pojo) {
        Connection con = null;
        PreparedStatement stm = null;
        String sql = "update ORDEM_PRODUCAO set ORP_NUMERO = ?, ORP_PDT_CODIGO = ?, ORP_QTDPROD = ? where ORP_NUMERO = ?";
        try {
            con = ConnectionManager.getInstance().getConnection();
            stm = con.prepareStatement(sql);
            stm.setInt(1, pojo.getNumOrp());
            stm.setString(2, pojo.getProduto().getCodigo());
            stm.setInt(3, pojo.getQtdProd());
            stm.setInt(4, pojo.getNumOrp());
            stm.execute();
        } catch (SQLException ex) {
            Logger.getLogger(ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if (stm != null) {
                try {
                    stm.close();
                } catch (SQLException ex) {
                    Logger.getLogger(ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException ex) {
                    Logger.getLogger(ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }

    public List<OrdemProducao> readByExample(OrdemProducao pojo) {
        Connection con = null;
        PreparedStatement stm = null;
        ResultSet rs = null;

        String sql ="select * from ORDEM_PRODUCAO o inner join PRODUTO p on p.PDT_CODIGO = o.ORP_PDT_CODIGO where p.PDT_DESCRICAO ilike ?";
        
        List<OrdemProducao> ordemProducao = new ArrayList<OrdemProducao>();
        
        if (pojo == null){
            pojo = new OrdemProducao();
            
        }
        
        if (pojo.getProduto().getDescricao() == null){
            
            Produto y = new Produto();
            y.setDescricao("");
            pojo.setProduto(y); 
        }
        
        
        con = ConnectionManager.getInstance().getConnection();
        try {
            Produto produto = pojo.getProduto();
            stm = con.prepareStatement(sql);
            stm.setString(1, "%"+produto.getDescricao()+"%");
            rs = stm.executeQuery();
            

            while (rs.next()) {
                OrdemProducao temp = new OrdemProducao();
                Produto produtos = new Produto();
                
                temp.setNumOrp(rs.getInt("ORP_NUMERO"));
                produtos.setCodigo(rs.getString("PDT_CODIGO"));
                produtos.setDescricao(rs.getString("PDT_DESCRICAO"));
                temp.setQtdProd(rs.getInt("ORP_QTDPROD"));
                temp.setProduto(produtos);
                ordemProducao.add(temp);   
            }
        } catch (SQLException ex) {
            Logger.getLogger(ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return ordemProducao;
    }

    public OrdemProducao readById(Integer codigo) {
        Connection conn = null;
        PreparedStatement stm = null;
        OrdemProducao ordemProducao = null;
        ResultSet rs = null;
        String sql = "Select * from ORDEM_PRODUCAO where ORP_NUMERO = ?";
        try {
            conn = ConnectionManager.getInstance().getConnection();
            stm = conn.prepareStatement(sql);
            stm.setInt(1, codigo.intValue());
            rs = stm.executeQuery();
            if (rs.next()){
                ordemProducao = new OrdemProducao();
                ProdutoDAO produtoDAO = new ProdutoDAO();
                ordemProducao.setNumOrp(rs.getInt("ORP_NUMERO"));
                ordemProducao.setProduto(produtoDAO.readById(rs.getString("ORP_PDT_CODIGO")));
                ordemProducao.setQtdProd(rs.getInt("ORP_QTDPROD"));
             }
          } catch (SQLException ex) {
            Logger.getLogger(ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
          }
            finally{
        	try{
                    stm.close();
		}catch(SQLException ex){
                    Logger.getLogger(ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
                    try{
                        conn.close();
                    }catch(SQLException ex){
                        Logger.getLogger(ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
                    }				
            }
            return ordemProducao;
    }

    public void delete(Integer codigo) {
        Connection conn = null;
        PreparedStatement stm = null;
        String sql = "delete * from ORDEM_PRODUCAO where ORP_NUMERO = ?";
        try {
            conn = ConnectionManager.getInstance().getConnection();
            stm = conn.prepareStatement(sql);
            stm.setInt(1, codigo.intValue());
            stm.execute();
        } catch (SQLException ex) {
            Logger.getLogger(ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
          }
            finally{
        	try{
                    stm.close();
		}catch(SQLException ex){
                    Logger.getLogger(ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
                    try{
                        conn.close();
                    }catch(SQLException ex){
                        Logger.getLogger(ProdutoDAO.class.getName()).log(Level.SEVERE, null, ex);
                    }				
            }
    }

    public OrdemProducao readById(String codigo) {
        throw new UnsupportedOperationException("Não é utilizado.");
    }

    public void delete(String codigo) {
        throw new UnsupportedOperationException("Não é utilizado.");
    }
}
